package perucuy.logic;

import java.lang.reflect.InvocationTargetException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.validator.DynaValidatorForm;

import perucuy.services.UsuarioService;
import perucuy.services.DominiosService;
import perucuy.services.TareaService;
import perucuy.transfers.UsuarioTO;
import perucuy.utils.Constantes;

public class LogueoAction extends Action {
    private static Logger log = Logger.getLogger(LogueoAction.class);
    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws InvocationTargetException, IllegalAccessException {
        log.debug("Se ha entrado al evento de Logueo");
        HttpSession session = request.getSession();
        if ("LOGOUT".equals(mapping.getParameter())) {
            log.debug("Saliendo del sistema");
            session.invalidate();
            return mapping.findForward("inicio");
        }
        
        ActionMessages msgs = new ActionMessages();
        DynaValidatorForm usuarioForm = (DynaValidatorForm) form;
        UsuarioTO usuario = new UsuarioTO();
        BeanUtils.copyProperties(usuario, usuarioForm);
        
        UsuarioService usuariosv = new UsuarioService();
        UsuarioTO encontrado = usuariosv.buscarUsuario(usuario, msgs);
        if (encontrado == null) {
            log.debug("el objeto usuario esta NULL");
            saveMessages(request, msgs);
            return mapping.findForward("regresar");
        }
        log.debug("usuario logeado");
        session.setAttribute(Constantes.LOGGED_USER, encontrado);
        cargarArregloASession(session);
        log.debug("Del objeto: " + encontrado.getTipo() + " Constante"
                + Constantes.USUARIO_ADMIN);
        if (encontrado.getTipo() == Constantes.USUARIO_ADMIN) {
            return mapping.findForward("admin");
        }
        return mapping.findForward("success");
    }
    
    private void cargarArregloASession(HttpSession session) {
        DominiosService domiserv = new DominiosService();
        TareaService tarsvr = new TareaService();
        session.setAttribute("listaTipoTarea",domiserv.getTipoTarea());
        session.setAttribute("listaClaseAlimento",domiserv.getTipoClaseAlimento());
        session.setAttribute("listaGrupoAlimento",domiserv.getTipoGrupoAlimento());
        session.setAttribute("listaTipoAlimento",domiserv.getTipoTipoAlimento());
        session.setAttribute("listaTipoTratamiento",domiserv.getTipoTipoTratamiento());
        session.setAttribute("listaRutaTratamiento",domiserv.getTipoRutaTratamiento());
        session.setAttribute("listaResponsable",tarsvr.getResponsables());
        session.setAttribute("listaTipoUnidad",domiserv.getTipoUnidad());        
    }
}
